package br.com.condominio.view.beans;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;

import br.com.condominio.controller.MoradorController;
import br.com.condominio.controller.ResidenciaController;
import br.com.condominio.view.vo.MoradorVO;
import br.com.condominio.view.vo.ResidenciaVO;

@ManagedBean(name = "moradorMBean")
@SessionScoped
public class MoradorMBean extends SessionMBean {

	// Controller para acesso ao DAO
	private final MoradorController controller;

	private int residenciaSelected;

	public MoradorMBean() throws ClassNotFoundException, SQLException {
		controller = new MoradorController();
		moradorVO = new MoradorVO();
	}

	private MoradorVO moradorVO = new MoradorVO();
	private DataModel<MoradorVO> listagemMoradores;

	public MoradorVO getMoradorVO() {
		return moradorVO;
	}

	public void setMoradorVO(MoradorVO MoradorVO) {
		this.moradorVO = MoradorVO;
	}

	public String update() throws SQLException, ClassNotFoundException {
		String retorno = "erro";

		moradorVO.setCodResidencia(residenciaSelected);
		if (controller.atualizar(moradorVO)) {
			retorno = "listagem_moradores";
		}
		return retorno;
	}

	public String salvar() throws SQLException, ClassNotFoundException {
		String retorno = "../erro";

		try {
			moradorVO.setCodResidencia(residenciaSelected);
			if (moradorVO.getCodMorador() == 0) {
				if (controller.criar(moradorVO)) {
					retorno = "listagem_moradores";
				}
			} else {
				if (controller.atualizar(moradorVO)) {
					retorno = "listagem_moradores";
				}
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		return retorno;
	}

	public DataModel<MoradorVO> getListagemMoradores() throws SQLException,
			ClassNotFoundException {

		List<MoradorVO> lista = controller.getAllMoradores();
		listagemMoradores = new ListDataModel<MoradorVO>(lista);
		return listagemMoradores;
	}

	public void setFistagemFuncionarios(DataModel<MoradorVO> funcionarios) {
		this.listagemMoradores = funcionarios;
	}

	public String excluir() throws SQLException, ClassNotFoundException {
		String retorno = "erro";

		if (controller.excluir(moradorVO)) {
			retorno = "listagem_moradores";
		}
		return retorno;
	}

	public void insert() {
		moradorVO = new MoradorVO();
	}

	public void selecionar() {
		moradorVO = listagemMoradores.getRowData();
	}

	public void alterar() {
		selecionar();
		residenciaSelected = moradorVO.getCodResidencia();
	}

	public int getResidenciaSelected() {
		return residenciaSelected;
	}

	public void setResidenciaSelected(int residenciaSelected) {
		this.residenciaSelected = residenciaSelected;
	}

	public Collection<SelectItem> getResidencias() throws SQLException,
			ClassNotFoundException {
		Collection<SelectItem> lista = new ArrayList<SelectItem>();
		List<ResidenciaVO> listaResidencias = new ResidenciaController()
				.getAllResidencias();
		for (int i = 0; i < listaResidencias.size(); i++) {
			lista.add(new SelectItem(
					listaResidencias.get(i).getCodResidencia(),
					listaResidencias.get(i).getDescricao()));
		}
		return lista;
	}
}